-- 运营活动: 限量商品


--[[
{
    cmd_id = 1, -- 命令id，用于批量停止、删除活动  
    act_id = 52, -- 活动id (52 限量商品)
    act_name = "限量商品", -- 活动名称
    act_desc = "充值对应金额可以获取相对奖励", -- 活动描述
    beg_time = 1493262000,  -- 活动开始时间(unix timestamp)
    end_time = 1593267400,  -- 活动结束时间(unix timestamp)
    config = { -- 配置数据
        Money = {98,328,648},      --充值的金额
        Gold = {980,3280,6480},     --充值元宝
        LimitCount = 10,        --活动期间最多可以领取10次
        Rewards = 
        {
            {       --第一档奖励
                {type = 0, id = 518, count = 2, bind = 1,},
                {type = 0, id = 763, count =20, bind = 1,},
            },
            {       --第二档奖励
                {type = 0, id = 518, count = 3, bind = 1,},
                {type = 0, id = 763, count =35, bind = 1,},
            },
            {       --第三档奖励
                {type = 0, id = 518, count = 5, bind = 1,},
                {type = 0, id = 763, count =50, bind = 1,},
            },
        },
    },
}

]]

-- 检查配置是否正确，正确则返回 0，否则返回错误码
function oper_act_52_check_cfg(cfg)
	if cfg == nil then return 20 end
	
	local config = cfg.config
	if config == nil then return 21 end
	
	if config.Rewards == nil then return 23 end
	if type(config.Rewards) ~= "table" then return 24 end
	for idx = 1, #config.Rewards do
		local dayRewards = config.Rewards[idx]
		if dayRewards == nil then return 25 end
		if type(dayRewards) ~= "table" then return 26 end
		if not oper_act_check_one_award_cfg(dayRewards) then
			return 22
		end	
	end

	return 0
end

-- 安装活动，成功则返回 0，否则返回错误码
function oper_act_52_setup(cfg)	
	return 0
end

-- 卸载活动
function oper_act_52_unsetup(cfg)	
end

-- 活动开始
function oper_act_52_start(cfg)
	local ssVar = System.getStaticVar()
	ssVar.oper_act_52_start = 1
	ssVar.oper_act_52_cmd = cfg.cmd_id
	ssVar.oper_act_52_act = cfg.act_id

	local data = gRankMgr_GetValueByIndx(0, RANK_DEFINE_OPERATION_52, 1)

    if data then
        local myData = BaseFuc_unserialize(data)
        if myData and myData.cmd_id and myData.cmd_id == cfg.cmd_id and myData.act_id and myData.act_id == cfg.act_id and
            myData.time and cfg.beg_time <= myData.time and  cfg.end_time > myData.time then
            return
        end
    end

	gRankMgr_Clear(RANK_DEFINE_OPERATION_52)
end

-- 活动结束
function oper_act_52_end(cfg)
	local ssVar = System.getStaticVar()
	ssVar.oper_act_52_start = nil
	ssVar.oper_act_52_cmd = nil
	ssVar.oper_act_52_act = nil
end

-- 打包数据
function oper_act_52_packet_data(sysarg, cfg)

	local ssVar = System.getStaticVar()
	if not ssVar.oper_act_52_start then
		return
	end
	if not cfg then
		return
	end

	local config = cfg.config
	if not config then
		return
	end

	
	local actorid = Actor.getActorId(sysarg)
	local data = gRankMgr_GetValueById(actorid, RANK_DEFINE_OPERATION_52, 1)
	local myData = BaseFuc_unserialize(data)

	if not myData or myData == "" or myData == 0 then
		myData = {}
	end

	if not myData.count then
		myData.count = config.LimitCount
	end

	local pack = oper_act_alloc_init_data_packet(sysarg, cfg.cmd_id, cfg.act_id)
	if (pack == nil) then
		return
	end

	DataPack.writeByte(pack, myData.count or 0)
	DataPack.flush(pack)

	--DataPack.writeByte(netPack, 1)		-- 活动特有参数
end

--[[
-- 操作，返回操作结果，0为成功
function oper_act_52_do(sysarg, cfg, clientPkt)
	if cfg == nil then return end
	
	if cfg.state == nil or cfg.state ~= 1 then -- 不在活动中
		Actor.sendTipmsg(sysarg,Lang.ScriptTips.Operation001, ttFlyTip)
		return
	end
	
	local config = cfg.config
	if config == nil then -- 参数错误
		print("error, oper_act_52_do cfg.config confg error")
		return
	end
		
	
	local netPack = oper_act_alloc_do_result_packet(sysarg, cfg.cmd_id, cfg.act_id, 0)
--	DataPack.writeByte(netPack, 1) -- 活动特有参数
	DataPack.flush(netPack)
end
]]

--[[
-- 跨天
function oper_act_52_new_day_arrive(act_id)	
	
end
]]

--限时商品元宝
function oper_act_52_withdrawyuanbao(sysarg, Gold)
	local ssVar = System.getStaticVar()
	if not ssVar.oper_act_52_start then
		return
	end
	if not ssVar.oper_act_52_cmd then
		return
	end
	if not ssVar.oper_act_52_act then
		return
	end
	
	local cfg = get_oper_act_cfg(ssVar.oper_act_52_cmd, ssVar.oper_act_52_act)
	if not cfg then
		return
	end

	local config = cfg.config
	if not config then
		return
	end	

	local actorid = Actor.getActorId(sysarg)
	local data = gRankMgr_GetValueById(actorid, RANK_DEFINE_OPERATION_52, 1)
	local myData = BaseFuc_unserialize(data)

	if not myData or myData == "" or myData == 0 then
		myData = {}
	end

	if not myData.count then
		myData.count = config.LimitCount
	end

	if myData.count <= 0 then
		return
	end

	for idx = 1, #config.Gold do
		if config.Gold[idx] == Gold then
			myData.count = myData.count - 1

			if not myData.cmd_id then
                myData.cmd_id = cfg.cmd_id
                myData.act_id = cfg.act_id
                myData.time = System.getSystemTime()
            end

            local newData = BaseFuc_serialize(myData)

			gRankMgr_SetRankEx(actorid, RANK_DEFINE_OPERATION_52, 1, newData)


			local rewardCfg = config.Rewards

			local rewards = rewardCfg[idx]

			
			local title = Lang.ScriptTips.Operation135
			local content = Lang.ScriptTips.Operation136

            local sex = Actor.getIntProperty(sysarg, PROP_ACTOR_SEX)
            local vocation = Actor.getIntProperty(sysarg, PROP_ACTOR_VOCATION)

			Awards.GiveToMailById(actorid, rewards, title, content, LogIds.OperationLogId052, Lang.LogTips.Operation052, vocation, sex)
			oper_act_52_packet_data(sysarg, cfg)
			break
		end
	end
end




